{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import missingno as msno\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Program Files\\Anaconda\\lib\\site-packages\\IPython\\core\\interactiveshell.py:2728: DtypeWarning: Columns (40) have mixed types. Specify dtype option on import or set low_memory=False.\n",
      "  interactivity=interactivity, compiler=compiler, result=result)\n"
     ]
    }
   ],
   "source": [
    "train = pd.read_csv(\"input\\\\train\\\\dataset.csv\")\n",
    "test = pd.read_csv(\"input\\\\test\\\\testing_set_for_users.csv\")\n",
    "dbd_faultcode = pd.read_csv(\"input\\\\train\\\\dbd_faultcode.csv\", encoding='gbk')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练集EDA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1、数据集分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>ACCEXCCOUNT</th>\n",
       "      <th>ACCRUNTIMES</th>\n",
       "      <th>ACCSTATE</th>\n",
       "      <th>ACCWORKTIMES</th>\n",
       "      <th>ALARM_0001</th>\n",
       "      <th>ALARM_0002</th>\n",
       "      <th>ALARM_0003</th>\n",
       "      <th>ALARM_0004</th>\n",
       "      <th>ALARM_0005</th>\n",
       "      <th>...</th>\n",
       "      <th>VEHICLENO</th>\n",
       "      <th>VEHICLESTATUS</th>\n",
       "      <th>VERSIONNUM</th>\n",
       "      <th>WATERTEMPERATURE</th>\n",
       "      <th>WIRELESSTEMP1</th>\n",
       "      <th>WIRELESSTEMP2</th>\n",
       "      <th>WIRELESSTEMP3</th>\n",
       "      <th>WIRELESSTEMP4</th>\n",
       "      <th>WORKDETAILID</th>\n",
       "      <th>WORKHOURS</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>535252</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1095.83</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>XUG02631THJE00230</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7285148.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>611637</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1377.16</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>XUG02633TGJE00499</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8396881.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>176787</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>261.22</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>XUG02233HHJE00797</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2172359.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>208670</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1730.52</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>XUG02233VHJE01038</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2576101.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>450358</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.05</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>XUG02233CHJE00883</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5953890.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 125 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0  ACCEXCCOUNT  ACCRUNTIMES  ACCSTATE  ACCWORKTIMES  ALARM_0001  \\\n",
       "0      535252          NaN          NaN       1.0       1095.83         0.0   \n",
       "1      611637          NaN          NaN       1.0       1377.16         0.0   \n",
       "2      176787          NaN          NaN       0.0        261.22         0.0   \n",
       "3      208670          NaN          NaN       1.0       1730.52         0.0   \n",
       "4      450358          NaN          NaN       1.0          0.05         0.0   \n",
       "\n",
       "   ALARM_0002  ALARM_0003  ALARM_0004  ALARM_0005    ...      \\\n",
       "0         0.0         0.0         0.0         0.0    ...       \n",
       "1         0.0         0.0         0.0         0.0    ...       \n",
       "2         0.0         0.0         0.0         0.0    ...       \n",
       "3         0.0         0.0         0.0         0.0    ...       \n",
       "4         0.0         0.0         0.0         0.0    ...       \n",
       "\n",
       "           VEHICLENO  VEHICLESTATUS  VERSIONNUM  WATERTEMPERATURE  \\\n",
       "0  XUG02631THJE00230            1.0         NaN               NaN   \n",
       "1  XUG02633TGJE00499            1.0         NaN               NaN   \n",
       "2  XUG02233HHJE00797            0.0         NaN               NaN   \n",
       "3  XUG02233VHJE01038            1.0         NaN               NaN   \n",
       "4  XUG02233CHJE00883            1.0         NaN               NaN   \n",
       "\n",
       "   WIRELESSTEMP1  WIRELESSTEMP2  WIRELESSTEMP3  WIRELESSTEMP4  WORKDETAILID  \\\n",
       "0            NaN            NaN            NaN            NaN     7285148.0   \n",
       "1            NaN            NaN            NaN            NaN     8396881.0   \n",
       "2            NaN            NaN            NaN            NaN     2172359.0   \n",
       "3            NaN            NaN            NaN            NaN     2576101.0   \n",
       "4            NaN            NaN            NaN            NaN     5953890.0   \n",
       "\n",
       "   WORKHOURS  \n",
       "0        NaN  \n",
       "1        NaN  \n",
       "2        NaN  \n",
       "3        NaN  \n",
       "4        NaN  \n",
       "\n",
       "[5 rows x 125 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1875088 entries, 0 to 1875087\n",
      "Columns: 125 entries, Unnamed: 0 to WORKHOURS\n",
      "dtypes: float64(118), int64(2), object(5)\n",
      "memory usage: 1.7+ GB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 训练集包含1875088条样本，125列。\n",
    "- 有三种数据类型，分别是：浮点型（118），整型（2），字符串（5）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2、缺失值分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对数据的缺失情况进行分析，分为严重缺失，较严重缺失，部分缺失和不确实情况\n",
    "- 严重缺失（缺失率达到99%以上）的数据统计意义不大，往往直接删除\n",
    "- 较严重缺失（缺失率达到95%以上），我们先分析不缺失数据，因为此类数据可能隐藏着某些重要信息，我们对其进行与标签的相关性分析，再决定是否将其删除\n",
    "- 部分缺失和不缺失数据往往蕴含着重要信息，我们暂时将其保留"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "共有32列数据完全缺失\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Index(['ACCEXCCOUNT', 'ENGINELOADSTATE', 'ENVHUMIDITY', 'ENVTEMPERATURE',\n",
       "       'INSIDE_HUMIDITY', 'INSIDE_TEMPERATURE', 'ISANALYSED', 'MILENUMBER',\n",
       "       'MIXSTATE', 'OC', 'OILLOCATION', 'OILPERCENT1', 'OILPRESSURE',\n",
       "       'OILTEMPERATURE', 'OILVALUE1', 'OILVALUE2', 'OPTOILLEVEL',\n",
       "       'POWERDOWNSTATE', 'PULSESIGNS', 'QUSHOILTIMES', 'ROAD', 'ROUNDSPEED',\n",
       "       'TERMINALEL_INSIDE', 'TERMINALEL_OUTSIDE', 'TERMINALSTATUS',\n",
       "       'VERSIONNUM', 'WATERTEMPERATURE', 'WIRELESSTEMP1', 'WIRELESSTEMP2',\n",
       "       'WIRELESSTEMP3', 'WIRELESSTEMP4', 'WORKHOURS'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_missing_columns = train.columns[train.isnull().sum()==train.shape[0]]\n",
    "print(\"共有%d列数据完全缺失\" % all_missing_columns.shape[0])\n",
    "all_missing_columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 在125列数据中，有32列数据完全缺失，这些数据对于模型的训练没有任何增益，所以我们选择将其删除\n",
    "- 训练集中的第一列无任何意义（训练集中没有该列），所以我们选择将其删除"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "train.drop(all_missing_columns, axis=1, inplace=True)\n",
    "train.drop(\"Unnamed: 0\", axis=1, inplace=True)\n",
    "test.drop(all_missing_columns, axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ACCRUNTIMES                   1633687\n",
       "ACCSTATE                       241401\n",
       "ACCWORKTIMES                   241401\n",
       "ALARM_0001                     241401\n",
       "ALARM_0002                     241401\n",
       "ALARM_0003                     241401\n",
       "ALARM_0004                     241401\n",
       "ALARM_0005                     241401\n",
       "ALARM_0006                     241401\n",
       "ALARM_0007                     241401\n",
       "ALARM_0008                     241401\n",
       "ALARM_0009                     241401\n",
       "ALARM_0010                     241401\n",
       "ALTITUDE                       241401\n",
       "AREA                             1036\n",
       "CD_VP_UNIQUENO                 241401\n",
       "CITY                             1036\n",
       "CMDTYPE                        241401\n",
       "COLLECTTIME                         0\n",
       "COOLANTLEVEL                   604698\n",
       "COOLANTTEMPERATURE             605322\n",
       "CURRENTFAULTCOUNT1            1553673\n",
       "CURRENTFAULTCOUNT2            1553673\n",
       "CURRENTFAULTCOUNT3            1873600\n",
       "CURRENTFAULTCOUNT4            1873600\n",
       "CURRENTFAULTCOUNT5            1875081\n",
       "CURRENTFAULTCOUNT6            1875081\n",
       "CURRENTSPEEDLOADPERCENTAGE     605647\n",
       "DIRECTION                      241401\n",
       "ELCANDVOL                      241401\n",
       "                               ...   \n",
       "ROTATIONALSPEED                603562\n",
       "SATELLITE                      241405\n",
       "SIMNO                          241401\n",
       "SPEED                          241401\n",
       "SPN                           1633687\n",
       "SPN1                          1553673\n",
       "SPN2                          1553673\n",
       "SPN3                          1873600\n",
       "SPN4                          1873600\n",
       "SPN5                          1875081\n",
       "SPN6                          1875081\n",
       "SPNCONVERSIONMODE1            1660206\n",
       "SPNCONVERSIONMODE2            1873375\n",
       "SPNCONVERSIONMODE3            1873641\n",
       "SPNCONVERSIONMODE4            1875053\n",
       "SPNCONVERSIONMODE5            1875083\n",
       "SPNCONVERSIONMODE6            1875086\n",
       "SPNMSB1                       1553673\n",
       "SPNMSB2                       1553673\n",
       "SPNMSB3                       1873600\n",
       "SPNMSB4                       1873600\n",
       "SPNMSB5                       1875081\n",
       "SPNMSB6                       1875081\n",
       "SYSTEMDATE                     241401\n",
       "TEMPERATURE                   1415749\n",
       "THROTTLECURRENT                605647\n",
       "UNIQUENO                            0\n",
       "VEHICLENO                      241401\n",
       "VEHICLESTATUS                  241401\n",
       "WORKDETAILID                   241401\n",
       "Length: 92, dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x2087a228358>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2082bbf5b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "msno.matrix(train[['ACCSTATE','ACCWORKTIMES','ALARM_0001','ALARM_0002','ALARM_0005','ALARM_0006','ALARM_0007','ALARM_0008','ALARM_0009','ALARM_0010','AREA','VEHICLENO','VEHICLESTATUS','WORKDETAILID']])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过可视化分析，发现很多样本是同事缺失了多个数据，而不是随机缺失"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3、单值分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有些特征的数据都是一个值，这种特征对模型无法带来增益，只能给模型带来噪音，所以我们选择将这种数据删除\n",
    "- 共有8列特征仅仅只包含一个元素值，这些特征列的名称为：\n",
    "> 'ALARM_0001', 'ALARM_0006', 'CMDTYPE', 'COOLANTLEVEL', 'LOCK_ALL', 'LOWVOLTAGESTATUS', 'SPNCONVERSIONMODE6', 'SPNMSB5'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "onlyone_val_columns = train.columns[train.nunique(axis=0) == 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "train.drop(['ALARM_0001', 'ALARM_0006', 'CMDTYPE', 'COOLANTLEVEL', 'LOCK_ALL', 'LOWVOLTAGESTATUS', 'SPNCONVERSIONMODE6', 'SPNMSB5'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "test.drop(['ALARM_0001', 'ALARM_0006', 'CMDTYPE', 'COOLANTLEVEL', 'LOCK_ALL', 'LOWVOLTAGESTATUS', 'SPNCONVERSIONMODE6', 'SPNMSB5'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4、label转换&分析\n",
    "前面我们删除了部分对模型训练无用的特征，此处我们对剩余特征进行重点相关性分析。首先将类别标签进行拼接。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CODE</th>\n",
       "      <th>SPN</th>\n",
       "      <th>FMI</th>\n",
       "      <th>DESCRIPTION</th>\n",
       "      <th>ENGINETYPEID</th>\n",
       "      <th>FAULTSOURCE</th>\n",
       "      <th>FAULTNAME</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1175</td>\n",
       "      <td>1576</td>\n",
       "      <td>5</td>\n",
       "      <td>油泵电磁阀1开路或对地短路</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>油泵电磁阀1开路或对地短路</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1176</td>\n",
       "      <td>9781</td>\n",
       "      <td>12</td>\n",
       "      <td>供油泵过载</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>供油泵过载</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1177</td>\n",
       "      <td>4232</td>\n",
       "      <td>12</td>\n",
       "      <td>供油泵过压</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>供油泵过压</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1178</td>\n",
       "      <td>4710</td>\n",
       "      <td>12</td>\n",
       "      <td>供油泵无负荷</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>供油泵无负荷</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1179</td>\n",
       "      <td>147</td>\n",
       "      <td>12</td>\n",
       "      <td>供油泵由于油泵泄漏失去负荷</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>供油泵由于油泵泄漏失去负荷</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1180</td>\n",
       "      <td>4233</td>\n",
       "      <td>2</td>\n",
       "      <td>共轨压力超过上限</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>共轨压力超过上限</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1181</td>\n",
       "      <td>136</td>\n",
       "      <td>2</td>\n",
       "      <td>共轨压力超过最高限制</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>共轨压力超过最高限制</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1182</td>\n",
       "      <td>4641</td>\n",
       "      <td>2</td>\n",
       "      <td>实际共轨压力低于目标值的控制下限</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>实际共轨压力低于目标值的控制下限</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1183</td>\n",
       "      <td>1543</td>\n",
       "      <td>2</td>\n",
       "      <td>CPU出错</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>CPU出错</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1184</td>\n",
       "      <td>1542</td>\n",
       "      <td>2</td>\n",
       "      <td>主CPU出错</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>主CPU出错</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   CODE   SPN  FMI       DESCRIPTION  ENGINETYPEID FAULTSOURCE  \\\n",
       "0  1175  1576    5     油泵电磁阀1开路或对地短路          1958        上柴国三   \n",
       "1  1176  9781   12             供油泵过载          1958        上柴国三   \n",
       "2  1177  4232   12             供油泵过压          1958        上柴国三   \n",
       "3  1178  4710   12            供油泵无负荷          1958        上柴国三   \n",
       "4  1179   147   12     供油泵由于油泵泄漏失去负荷          1958        上柴国三   \n",
       "5  1180  4233    2          共轨压力超过上限          1958        上柴国三   \n",
       "6  1181   136    2        共轨压力超过最高限制          1958        上柴国三   \n",
       "7  1182  4641    2  实际共轨压力低于目标值的控制下限          1958        上柴国三   \n",
       "8  1183  1543    2             CPU出错          1958        上柴国三   \n",
       "9  1184  1542    2            主CPU出错          1958        上柴国三   \n",
       "\n",
       "          FAULTNAME  \n",
       "0     油泵电磁阀1开路或对地短路  \n",
       "1             供油泵过载  \n",
       "2             供油泵过压  \n",
       "3            供油泵无负荷  \n",
       "4     供油泵由于油泵泄漏失去负荷  \n",
       "5          共轨压力超过上限  \n",
       "6        共轨压力超过最高限制  \n",
       "7  实际共轨压力低于目标值的控制下限  \n",
       "8             CPU出错  \n",
       "9            主CPU出错  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dbd_faultcode.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def spn_fmi_2_code(Spn_Fmi, Code):\n",
    "    spn_fmi_dict = {}\n",
    "    for i in range(len(Spn_Fmi)):\n",
    "        spn_fmi_dict[Spn_Fmi[i]] = Code[i]\n",
    "    return spn_fmi_dict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "dbd_faultcode['SPN_FMI'] = dbd_faultcode['SPN'].fillna(-1).astype(int).astype(str) + '_' + dbd_faultcode['FMI'].fillna(-1).astype(int).astype(str)\n",
    "train['SPN_FMI'] = train['SPN'].fillna(-1).astype(int).astype(str) + '_' + train['FMI'].fillna(-1).astype(int).astype(str)\n",
    "\n",
    "spn_fmi_dict = spn_fmi_2_code(dbd_faultcode['SPN_FMI'].values, dbd_faultcode['CODE'].values)\n",
    "spn_fmi_dict['-1_-1'] = -1\n",
    "\n",
    "def transfer_2_code(x):\n",
    "    if x in spn_fmi_dict.keys():\n",
    "        return spn_fmi_dict[x]\n",
    "    return -1\n",
    "\n",
    "train['SPN_FMI_Code'] = train['SPN_FMI'].apply(transfer_2_code)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Code</th>\n",
       "      <th>CodeNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1</td>\n",
       "      <td>1649858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1206</td>\n",
       "      <td>215738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1239</td>\n",
       "      <td>8194</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1141</td>\n",
       "      <td>1075</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1182</td>\n",
       "      <td>144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1168</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1211</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1216</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1209</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1145</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>1341</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>1246</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>1215</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>1122</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Code  CodeNum\n",
       "0     -1  1649858\n",
       "1   1206   215738\n",
       "2   1239     8194\n",
       "3   1141     1075\n",
       "4   1182      144\n",
       "5   1168       41\n",
       "6   1211       24\n",
       "7   1216        4\n",
       "8   1209        4\n",
       "9   1145        2\n",
       "10  1341        1\n",
       "11  1246        1\n",
       "12  1215        1\n",
       "13  1122        1"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "code_distribution = pd.DataFrame(train['SPN_FMI_Code'].value_counts().reset_index())\n",
    "code_distribution.columns = ['Code','CodeNum']\n",
    "code_distribution"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x208af2dfba8>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x208af2b9c88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.barplot(x ='Code', y = 'CodeNum', data = code_distribution)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_target  = train[train.SPN_FMI_Code.isin([1206,1239,1141,1174,1182])]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CODE</th>\n",
       "      <th>SPN</th>\n",
       "      <th>FMI</th>\n",
       "      <th>DESCRIPTION</th>\n",
       "      <th>ENGINETYPEID</th>\n",
       "      <th>FAULTSOURCE</th>\n",
       "      <th>FAULTNAME</th>\n",
       "      <th>SPN_FMI</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1182</td>\n",
       "      <td>4641</td>\n",
       "      <td>2</td>\n",
       "      <td>实际共轨压力低于目标值的控制下限</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>实际共轨压力低于目标值的控制下限</td>\n",
       "      <td>4641_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>1206</td>\n",
       "      <td>8809</td>\n",
       "      <td>15</td>\n",
       "      <td>油水分离器中液位过高</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>油水分离器中液位过高</td>\n",
       "      <td>8809_15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>1239</td>\n",
       "      <td>108</td>\n",
       "      <td>4</td>\n",
       "      <td>大气压力传感器电压低于下限门槛值</td>\n",
       "      <td>1958</td>\n",
       "      <td>潍柴国三</td>\n",
       "      <td>大气压力传感器电压低于下限门槛值</td>\n",
       "      <td>108_4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>220</th>\n",
       "      <td>1141</td>\n",
       "      <td>8480</td>\n",
       "      <td>2</td>\n",
       "      <td>油门踏板传感器#1和#2信号无效</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>油门踏板传感器#1和#2信号无效</td>\n",
       "      <td>8480_2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>251</th>\n",
       "      <td>1174</td>\n",
       "      <td>9779</td>\n",
       "      <td>5</td>\n",
       "      <td>油泵电磁阀#2开路或对地短路</td>\n",
       "      <td>1958</td>\n",
       "      <td>上柴国三</td>\n",
       "      <td>油泵电磁阀#2开路或对地短路</td>\n",
       "      <td>9779_5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     CODE   SPN  FMI       DESCRIPTION  ENGINETYPEID FAULTSOURCE  \\\n",
       "7    1182  4641    2  实际共轨压力低于目标值的控制下限          1958        上柴国三   \n",
       "31   1206  8809   15        油水分离器中液位过高          1958        上柴国三   \n",
       "63   1239   108    4  大气压力传感器电压低于下限门槛值          1958        潍柴国三   \n",
       "220  1141  8480    2  油门踏板传感器#1和#2信号无效          1958        上柴国三   \n",
       "251  1174  9779    5    油泵电磁阀#2开路或对地短路          1958        上柴国三   \n",
       "\n",
       "            FAULTNAME  SPN_FMI  \n",
       "7    实际共轨压力低于目标值的控制下限   4641_2  \n",
       "31         油水分离器中液位过高  8809_15  \n",
       "63   大气压力传感器电压低于下限门槛值    108_4  \n",
       "220  油门踏板传感器#1和#2信号无效   8480_2  \n",
       "251    油泵电磁阀#2开路或对地短路   9779_5  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target_code = [1206,1239,1141,1174,1182]\n",
    "dbd_faultcode[dbd_faultcode.CODE.isin(target_code)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "all_missing_columns_2 = train_target.columns[train_target.isnull().sum() == train_target.shape[0]]\n",
    "onlyone_val_columns_2 = train_target.columns[train_target.nunique(axis=0) == 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Program Files\\Anaconda\\lib\\site-packages\\ipykernel_launcher.py:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n",
      "E:\\Program Files\\Anaconda\\lib\\site-packages\\ipykernel_launcher.py:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "train_target.drop(all_missing_columns_2, axis=1, inplace=True)\n",
    "train_target.drop(onlyone_val_columns_2, axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1206    215738\n",
       "1239      8194\n",
       "1141      1075\n",
       "1182       144\n",
       "Name: SPN_FMI_Code, dtype: int64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_target['SPN_FMI_Code'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ACCRUNTIMES</th>\n",
       "      <th>AREA</th>\n",
       "      <th>CITY</th>\n",
       "      <th>COLLECTTIME</th>\n",
       "      <th>FAULTTIME</th>\n",
       "      <th>FMI</th>\n",
       "      <th>FRID</th>\n",
       "      <th>LAT</th>\n",
       "      <th>LNG</th>\n",
       "      <th>PROVINCE</th>\n",
       "      <th>READFLAG</th>\n",
       "      <th>SPN</th>\n",
       "      <th>UNIQUENO</th>\n",
       "      <th>SPN_FMI</th>\n",
       "      <th>SPN_FMI_Code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>23150</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:23:45</td>\n",
       "      <td>2018-04-01 06:23:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357817.0</td>\n",
       "      <td>34.108867</td>\n",
       "      <td>34.108867</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23178</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:25:45</td>\n",
       "      <td>2018-04-01 06:25:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357818.0</td>\n",
       "      <td>34.108877</td>\n",
       "      <td>34.108877</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23208</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:27:45</td>\n",
       "      <td>2018-04-01 06:27:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357819.0</td>\n",
       "      <td>34.108891</td>\n",
       "      <td>34.108891</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23240</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:29:45</td>\n",
       "      <td>2018-04-01 06:29:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357821.0</td>\n",
       "      <td>34.109057</td>\n",
       "      <td>34.109057</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23274</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:31:45</td>\n",
       "      <td>2018-04-01 06:31:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357822.0</td>\n",
       "      <td>34.109043</td>\n",
       "      <td>34.109043</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       ACCRUNTIMES      AREA      CITY          COLLECTTIME  \\\n",
       "23150        979.0  341322.0  341300.0  2018-04-01 06:23:45   \n",
       "23178        979.0  341322.0  341300.0  2018-04-01 06:25:45   \n",
       "23208        979.0  341322.0  341300.0  2018-04-01 06:27:45   \n",
       "23240        979.0  341322.0  341300.0  2018-04-01 06:29:45   \n",
       "23274        979.0  341322.0  341300.0  2018-04-01 06:31:45   \n",
       "\n",
       "                 FAULTTIME   FMI       FRID        LAT        LNG  PROVINCE  \\\n",
       "23150  2018-04-01 06:23:45  15.0  2357817.0  34.108867  34.108867  340000.0   \n",
       "23178  2018-04-01 06:25:45  15.0  2357818.0  34.108877  34.108877  340000.0   \n",
       "23208  2018-04-01 06:27:45  15.0  2357819.0  34.108891  34.108891  340000.0   \n",
       "23240  2018-04-01 06:29:45  15.0  2357821.0  34.109057  34.109057  340000.0   \n",
       "23274  2018-04-01 06:31:45  15.0  2357822.0  34.109043  34.109043  340000.0   \n",
       "\n",
       "       READFLAG     SPN            UNIQUENO  SPN_FMI  SPN_FMI_Code  \n",
       "23150       1.0  8809.0  201704140835245913  8809_15          1206  \n",
       "23178       1.0  8809.0  201704140835245913  8809_15          1206  \n",
       "23208       1.0  8809.0  201704140835245913  8809_15          1206  \n",
       "23240       1.0  8809.0  201704140835245913  8809_15          1206  \n",
       "23274       1.0  8809.0  201704140835245913  8809_15          1206  "
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_target.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5、单变量分析\n",
    "#### ACCRUNTIMES\n",
    "- Code1239的ACCRUNTIMES的最小值为4021，比其他三个的最大值都大，可以根据该特征进行区分\n",
    "- Code1182的最大值小于800"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x2087a0c7278>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x208112121d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.stripplot(x='SPN_FMI_Code', y='ACCRUNTIMES', data=train_target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    71559.000000\n",
       "mean      1054.037354\n",
       "std        926.316787\n",
       "min          0.000000\n",
       "25%        488.000000\n",
       "50%        897.000000\n",
       "75%       1211.000000\n",
       "max       4498.000000\n",
       "Name: ACCRUNTIMES, dtype: float64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test['ACCRUNTIMES'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    1075.000000\n",
       "mean      572.342326\n",
       "std       413.494064\n",
       "min         0.000000\n",
       "25%       167.000000\n",
       "50%       718.000000\n",
       "75%       973.000000\n",
       "max      1627.000000\n",
       "Name: ACCRUNTIMES, dtype: float64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_target[train_target.SPN_FMI_Code==1141]['ACCRUNTIMES'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    144.000000\n",
       "mean     550.500000\n",
       "std      185.069256\n",
       "min        6.000000\n",
       "25%      419.000000\n",
       "50%      620.000000\n",
       "75%      621.000000\n",
       "max      771.000000\n",
       "Name: ACCRUNTIMES, dtype: float64"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_target[train_target.SPN_FMI_Code==1182]['ACCRUNTIMES'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    215738.000000\n",
       "mean        878.156690\n",
       "std         379.871741\n",
       "min           0.000000\n",
       "25%         652.000000\n",
       "50%         877.000000\n",
       "75%        1139.000000\n",
       "max        3527.000000\n",
       "Name: ACCRUNTIMES, dtype: float64"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_target[train_target.SPN_FMI_Code==1206]['ACCRUNTIMES'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    8194.000000\n",
       "mean     4199.182695\n",
       "std        93.519804\n",
       "min      4021.000000\n",
       "25%      4119.000000\n",
       "50%      4191.000000\n",
       "75%      4281.000000\n",
       "max      4355.000000\n",
       "Name: ACCRUNTIMES, dtype: float64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_target[train_target.SPN_FMI_Code==1239]['ACCRUNTIMES'].describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### READFLAG\n",
    "- READFLAG为0时，只有Code1206出现了\n",
    "- READFLAG为1时，出现了其他所有标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>READFLAG</th>\n",
       "      <th>SPN_FMI_Code</th>\n",
       "      <th>showtimes</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1206</td>\n",
       "      <td>4581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1206</td>\n",
       "      <td>211157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1239</td>\n",
       "      <td>8194</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1141</td>\n",
       "      <td>1075</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1182</td>\n",
       "      <td>144</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   READFLAG  SPN_FMI_Code  showtimes\n",
       "0       0.0          1206       4581\n",
       "1       1.0          1206     211157\n",
       "2       1.0          1239       8194\n",
       "3       1.0          1141       1075\n",
       "4       1.0          1182        144"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "readflag = pd.DataFrame(train_target.groupby('READFLAG')['SPN_FMI_Code'].value_counts())\n",
    "readflag.columns = ['showtimes']\n",
    "readflag.reset_index(inplace=True)\n",
    "readflag.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x208963e12b0>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAELCAYAAAAP/iu7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3XuUFeWd7vHvI6CgAQQUg7aGm3oEIiitwkSMGoNoFDVqQhIFoxliRkedkziayxljorMc9WiGyGiYYICMaTQogjl4QYwRXRptDAqICagoLUS5KKKA3H7nj6qGDfRldze1d/fm+ay11+791ltVv122PF1Vb1UpIjAzM8vSXsUuwMzMSp/DxszMMuewMTOzzDlszMwscw4bMzPLnMPGzMwy57AxM7PMOWzMzCxzDhszM8tc62IX0FwccMAB0b1792KXYWbWosyZM2dlRBxYXz+HTap79+5UVlYWuwwzsxZF0tv59PNhNDMzy5zDxszMMuewMTOzzPmcjZk1XgQsngV/nQGbP4WD+sKAb0C7TsWuLFObNm2iqqqKDRs2FLuUgmnbti1lZWW0adOmUfM7bMyscT58B343At5fsGP7rJ/BV26HYy4qTl0FUFVVRfv27enevTuSil1O5iKCVatWUVVVRY8ePRq1DB9GM7OG27QBJp27a9AAbF4P066Evz1R+LoKZMOGDXTp0mWPCBoASXTp0qVJe3IOGzNruPkPwuo36ugQMPv2gpVTDHtK0FRr6vd12JhZw81/sP4+S/8Ma6qyr8VaBIeNmTXchjW7t18JaNWqFQMGDKBfv36cffbZfPjhhwAsWbKEdu3aMWDAgG2vSZMmbZvvL3/5C5J4/PHHa1xe37596d+/P3fccQdbt24F4Omnn6Zjx47blnfaaacB8NOf/pTbb695j3Lq1KlI4vXXX9+hfdGiRZx11ln06tWLgQMHcsopp/DMM8/stu1SzWFjZg3XqXv9fVrtDe27ZV5Kc9GuXTvmzp3L/Pnz6dy5M2PHjt02rVevXsydO3fba+TIkdumVVRUcOKJJ1JRUVHj8hYsWMDMmTOZMWMGN95447bpQ4YM2ba8J598st76qtczefLkbW0bNmzgK1/5CqNHj+aNN95gzpw5/PKXv+TNN99syqaokcPGzBru2JH19znqbNi3c/a1NEODBw/m3XffrbdfRDBlyhQmTJjAE088UesJ+K5duzJu3DjuuusuIqLB9Xz88cc899xzjB8/foewue+++xg8eDDDhw/f1tavXz8uueSSBq+jPg4bM2u4nl+EPufUPr1dZzjlx4WrpxnZsmULs2bN2uEf8DfeeGOHw2izZ88G4LnnnqNHjx706tWLk08+mRkzZtS63J49e7J161bef/99AGbPnr1teTfffHOdNT388MMMGzaMI444gs6dO/Pyyy8DsGDBAo499timfuW8+DobM2uc88fD/odB5QTYuHZ7e/chcObt0KVX0UorhvXr1zNgwACWLFnCwIED+fKXv7xtWvVhtJ1VVFQwYsQIAEaMGMFvf/tbvvrVr9a6jty9miFDhvCHP/whr9oqKiq45pprtq2noqKixpA577zzWLRoEUcccQQPPfRQXsvOl8PGzBqnVRsYehN88TpY8ixs3gBd+8KBRxS7sqKoPseyZs0azjrrLMaOHctVV11Va/8tW7bw4IMPMn36dG6++eZtF06uXbuW9u3b79L/zTffpFWrVnTt2pWFCxfmXdeqVat46qmnmD9/PpLYsmULkrj11lvp27fvDoMBpk6dSmVlJT/4wQ8a9uXz4MNoZtY0+7SHI8+AvuftsUGTq2PHjowZM4bbb7+dTZs21drvySefpH///ixdupQlS5bw9ttvc/755/Pwww/v0nfFihVcfvnlXHnllQ2+3mXKlCmMHDmSt99+myVLlrB06VJ69OjBs88+yze/+U2ee+45pk+fvq3/unXrGrT8fGUWNpIOlfRHSQslLZB0ddreWdJMSYvS905puySNkbRY0quSjs1Z1qi0/yJJo3LaB0qal84zRul/hdrWYWZWCMcccwz9+/ffdjJ+53M2Y8aMoaKigvPOO2+H+c4//3x+97vfAdsPy/Xt25fTTjuNoUOHcsMNN9S77ptuuomysrJtr7rW065dO/7whz9wzz330LNnTwYPHsxNN93ET37yk920JbZTY0Y25LVgqRvQLSJeltQemAOcC1wCrI6IWyRdD3SKiOsknQn8M3AmcALwnxFxgqTOQCVQDkS6nIER8YGkF4GrgReAGcCYiHhU0q01raOuesvLy8MPTzOzfCxcuJCjjjqq2GUUXE3fW9KciCivb97M9mwiYnlEvJz+vBZYCBwCnANMTLtNJAkg0vZJkXgB2D8NrNOB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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x208950f7470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.stripplot(x='SPN_FMI_Code', y='showtimes', hue='READFLAG', data=readflag, size=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### PROVINCE\n",
    "- 训练集中的Province在测试集中都有"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ACCRUNTIMES</th>\n",
       "      <th>AREA</th>\n",
       "      <th>CITY</th>\n",
       "      <th>COLLECTTIME</th>\n",
       "      <th>FAULTTIME</th>\n",
       "      <th>FMI</th>\n",
       "      <th>FRID</th>\n",
       "      <th>LAT</th>\n",
       "      <th>LNG</th>\n",
       "      <th>PROVINCE</th>\n",
       "      <th>READFLAG</th>\n",
       "      <th>SPN</th>\n",
       "      <th>UNIQUENO</th>\n",
       "      <th>SPN_FMI</th>\n",
       "      <th>SPN_FMI_Code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>23150</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:23:45</td>\n",
       "      <td>2018-04-01 06:23:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357817.0</td>\n",
       "      <td>34.108867</td>\n",
       "      <td>34.108867</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23178</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:25:45</td>\n",
       "      <td>2018-04-01 06:25:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357818.0</td>\n",
       "      <td>34.108877</td>\n",
       "      <td>34.108877</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23208</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:27:45</td>\n",
       "      <td>2018-04-01 06:27:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357819.0</td>\n",
       "      <td>34.108891</td>\n",
       "      <td>34.108891</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23240</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:29:45</td>\n",
       "      <td>2018-04-01 06:29:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357821.0</td>\n",
       "      <td>34.109057</td>\n",
       "      <td>34.109057</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23274</th>\n",
       "      <td>979.0</td>\n",
       "      <td>341322.0</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>2018-04-01 06:31:45</td>\n",
       "      <td>2018-04-01 06:31:45</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2357822.0</td>\n",
       "      <td>34.109043</td>\n",
       "      <td>34.109043</td>\n",
       "      <td>340000.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8809.0</td>\n",
       "      <td>201704140835245913</td>\n",
       "      <td>8809_15</td>\n",
       "      <td>1206</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       ACCRUNTIMES      AREA      CITY          COLLECTTIME  \\\n",
       "23150        979.0  341322.0  341300.0  2018-04-01 06:23:45   \n",
       "23178        979.0  341322.0  341300.0  2018-04-01 06:25:45   \n",
       "23208        979.0  341322.0  341300.0  2018-04-01 06:27:45   \n",
       "23240        979.0  341322.0  341300.0  2018-04-01 06:29:45   \n",
       "23274        979.0  341322.0  341300.0  2018-04-01 06:31:45   \n",
       "\n",
       "                 FAULTTIME   FMI       FRID        LAT        LNG  PROVINCE  \\\n",
       "23150  2018-04-01 06:23:45  15.0  2357817.0  34.108867  34.108867  340000.0   \n",
       "23178  2018-04-01 06:25:45  15.0  2357818.0  34.108877  34.108877  340000.0   \n",
       "23208  2018-04-01 06:27:45  15.0  2357819.0  34.108891  34.108891  340000.0   \n",
       "23240  2018-04-01 06:29:45  15.0  2357821.0  34.109057  34.109057  340000.0   \n",
       "23274  2018-04-01 06:31:45  15.0  2357822.0  34.109043  34.109043  340000.0   \n",
       "\n",
       "       READFLAG     SPN            UNIQUENO  SPN_FMI  SPN_FMI_Code  \n",
       "23150       1.0  8809.0  201704140835245913  8809_15          1206  \n",
       "23178       1.0  8809.0  201704140835245913  8809_15          1206  \n",
       "23208       1.0  8809.0  201704140835245913  8809_15          1206  \n",
       "23240       1.0  8809.0  201704140835245913  8809_15          1206  \n",
       "23274       1.0  8809.0  201704140835245913  8809_15          1206  "
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_target.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "set()"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "set(train_target['PROVINCE'].value_counts().index) - set(test['PROVINCE'].unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "province_code_distribution = pd.DataFrame({'PROVINCE': train_target['PROVINCE'].unique()})\n",
    "codes = [1206,1141,1182,1239 ]\n",
    "for code in codes:\n",
    "    province_code_distribution[code] = 0\n",
    "    province = train_target[train_target.SPN_FMI_Code==code][\"PROVINCE\"].unique()\n",
    "    province_code_distribution.loc[province_code_distribution.PROVINCE.isin(province), code] = 1 \n",
    "    \n",
    "province_code_distribution.set_index('PROVINCE',inplace= True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x208a05e0390>"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x208a05d89e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "province_code_distribution.plot(kind='bar', stacked=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
